递归 | 数据结构与算法

【数据结构与算法】

  • 今天在复习数据结构的时候想起来编程思想中的递归非常重要,就想着先复习下递归的概念

图片

【什么叫递归?】

直接搬网上一个比较有意思的例子更加容易理解

例1:
有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:
1.第一刀先把一个苹果切成重量均等的2份A1和A2;
2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;
3.把A11切成均等的两份……
4.直到每一小份都小于等于1俩为止。
以上的例子就是递归一个模型,把一个大的事物化成若干个小的事物,每一次使用的方法都相同。

例2:
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”

比较专业的解释:
    维基百科:递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法
    维基百科正式定义:在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

【递归的特性】

递归必须有一个明确的结束条件,不然回想上面例2一样出现无限循环
每一次执行应当更加接近我们的结束条件
深层次的递归可能导致栈溢出

暂时就想到这么多~至于代码,这样的代码搜索引擎更加专业~等有空在写下具体代码